lexer grammar XmlLexer;

options {
  language = Java;
}

@lexer::header {
   package ejercicio4;
}

  fragment NUEVA_LINEA: ('\r'? '\n') ;
  fragment LETRA: ('A'..'Z')|('a'..'z');
  fragment ESPACIO: ' '|'.';
  fragment DIGITO: '0'..'9';
  fragment COMILLAS : '"';
  fragment BARRA: '/';
  fragment TAGOP : '<';
  fragment TAGCL : '>';
  fragment COMMOP:'<!--';
  fragment COMMCL: '-->';

  fragment BIBLIOTECA: 'biblioteca';
  fragment LIBRO: 'libro'; 
  fragment TITULO: 'titulo';
  fragment AUTOR: 'autor';
  fragment EDIT: 'editorial';
  
  
  IGUAL: '='; 
  ATRIB : IDENT IGUAL VALOR;
  TEXTO : (ESPACIO|LETRA)+;
  fragment IDENT: LETRA+;  
  
  OP_BIBLIO: TAGOP BIBLIOTECA TAGCL;
  CL_BIBLIO: TAGOP BARRA BIBLIOTECA TAGCL;
  OP_LIBRO: TAGOP LIBRO TAGCL; 
  CL_LIBRO: TAGOP BARRA LIBRO TAGCL;
  OP_TITULO: TAGOP TITULO TAGCL;
  CL_TITULO: TAGOP BARRA TITULO TAGCL;
  OP_AUTOR: TAGOP AUTOR TAGCL;
  CL_AUTOR: TAGOP BARRA AUTOR TAGCL;
  OP_EDIT: TAGOP EDIT TAGCL;
  CL_EDIT: TAGOP BARRA EDIT TAGCL;
  
  BLANCO : (' '|'\t'|'\r'?'\n') {$channel=HIDDEN;};
  COMENTARIO: COMMOP (options {greedy=false;}:.)* COMMCL {$channel=HIDDEN;};
  VALOR : COMILLAS TEXTO COMILLAS;
  
  
  
 
